package com.hengpeng.itfin.sms;

import java.util.Date;
import java.util.List;

import com.hengpeng.itfinbase.persist.SmsLog;
import com.hengpeng.itfinbase.persist.SmsLog.SmsLogTransType;
import com.hengpeng.itfinbase.persist.SmsPartner;

/**
 * <pre>
 * 短信服务接口
 * </pre>
 * @author shanguogang
 * @version 1.0, 2015-7-31
 */
public interface SmsSendInnerService
{
	public List<SmsLog> lockSmsLogList(int size, Long partnerId);

	/**
	 * <pre>
	 * 通过构造现有的或者新建的短信记录立即发送
	 * 注意:大部分情况下应该调用其他接口来发送.
	 * </pre>
	 * @param smsLog 现有的或者新建的短信记录
	 * @param partner 短信渠道配置
	 * @return 短信发送结果
	 */
	public boolean sendNow(SmsLog smsLog, SmsPartner partner);

	/**
	 * <pre>
	 * 通过构造现有的或者新建的短信记录立即发送
	 * 注意:大部分情况下应该调用其他接口来发送.
	 * </pre>
	 * @param smsLog 现有的或者新建的短信记录
	 * @return 短信发送结果
	 */
	public boolean sendNow(SmsLog smsLog);

	public abstract void release();

	/**
	 * <pre>
	 * 线程发送告警短信
	 * </pre>
	 * @param content
	 */
	public void sendSystemAlarm(final String content);

	/**
	 * <pre>
	 * 立即发送短信
	 * </pre>
	 * @param mobile 手机号码
	 * @param content 短信内容
	 * @param partnerId 短信渠道
	 * @param type 短信类型,决定了优先级
	 */
	void sendNow(String mobile, String content, Long partnerId, SmsLogTransType type);

	/**
	 * <pre>
	 * 发送短信
	 * </pre>
	 * @param mobile 手机号码
	 * @param content 短信内容
	 * @param partnerId 短信渠道
	 * @param type 短信类型,决定了优先级
	 * @param scheduleTime 定时发送时间,为空则立即发送
	 */
	void send(String mobile, String content, Long partnerId, SmsLogTransType type, Date scheduleTime);
}
